package es.itpyme.websip.domain;

import java.io.Serializable;

import javax.persistence.*;

import java.util.Date;
import java.util.Set;


/**
 * The persistent class for the USUARIOS database table.
 * 
 */
@Entity
@Table(name="USUARIOS",uniqueConstraints={@UniqueConstraint(columnNames={"USER"})})
public class Usuario extends Base implements IBaseDAO, Serializable {
	private static final long serialVersionUID = 1L;

	public static final String ATTR_NOMBRE="nombre";
	public static final String ATTR_APELLIDO1="apellido1";
	public static final String ATTR_APELLIDO2="apellido2";
	public static final String ATTR_NOMBRE_FON="nombreFon";
	public static final String ATTR_APELLIDO1_FON="apellido1Fon";
	public static final String ATTR_APELLIDO2_FON="apellido2Fon";
	public static final String ATTR_ROLE="role";
	public static final String ATTR_TIPO_USUARIO="tipo";
	public static final String ATTR_ESTADO="estado";
	public static final String ATTR_USUARIO="usuario";
	
	
	@Id
	@SequenceGenerator(name="USUARIOS_ID_GENERATOR", sequenceName="USUARIOSID")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="USUARIOS_ID_GENERATOR")
	@Column(updatable=false)
	private Integer id;

		
	@Column(name="NOMBRE",length=255,nullable=false)
	private String nombre;
	
	@Column(name="NOMBRE_FON",length=255,nullable=false)
	private String nombreFon;
	
	@Column(name="ASIGNACION")
	private Integer asignacion;
	
	@Column(name="APELLIDO1",nullable=false,length=255)
	private String apellido1;

	@Column(name="APELLIDO1_FON",nullable=false,length=255)
	private String apellido1Fon;
	
	@Column(name="APELLIDO2",length=255)
	private String apellido2;
	
	@Column(name="APELLIDO2_FON",length=255)
	private String apellido2Fon;
	
	@Column(name="EMAIL",length=255)
	private String email;
	
	@Column(name="PASSWD",length=255)
	private String passwd;
	
	@Column(name="ROLE",length=3,nullable=false)
	private String role;

	
	@Column(name="USUARIO",length=255,nullable=false,unique=true)
	private String usuario;

	@Column(name="TIPO",length=1,nullable=false)
	private String tipo=IConstantesDomain.USUARIO_TIPO_PROVEEDOR;
	
	
	@Column(name="ABRV",length=1,nullable=false)
	private String abrv;
	
	
	@Lob
	@Column(name="FOTO")
	private byte[] foto;
	
	
	
	@Column(name="USU_CREACION", updatable=false)
	private Integer usuCreacion;  
	
	@Column(name="USU_MODIFICACION")
	private Integer usuModificacion;
	
	@Temporal( TemporalType.DATE)
	@Column(name="FE_CREACION", updatable=false)
	private Date feCreacion;
	
	@Temporal( TemporalType.DATE)
	@Column(name="FE_MODIFICACION")
	private Date feModificacion;
	
	@Column(name="ESTADO",length=1)
	private String estado;
	
	//bi-directional many-to-one association to Avance
	@OneToMany(mappedBy="usuario")
	private Set<UsuariosVersion> versionesUsuario;
	
    public Usuario() {
    }
    
    public Usuario(Integer id,String usuario,String passwd,String nombre,String apellido1,String apellido2,String role,String tipo,String abrv){
    	this.nombre=nombre;
    	this.id=id;
    	this.passwd=passwd;
    	this.role=role;
    	this.tipo=tipo;
    	this.abrv=abrv;
    	this.usuario=usuario;
    	this.apellido1=apellido1;
    	this.apellido2=apellido2;
    	this.asignacion=IConstantesDomain.ASIGNACION_FULL;
    }

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	
	
	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
		
	}

	public String getPasswd() {
		return this.passwd;
	}

	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}

	public String getRole() {
		return this.role;
	}

	public void setRole(String role) {
		this.role = role;
	}

	public String getUsuario() {
		return this.usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario= usuario;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	public String getAbrv() {
		return abrv;
	}

	public void setAbrv(String abrv) {
		this.abrv = abrv;
	}

	public String getApellido1() {
		return apellido1;
	}

	public void setApellido1(String apellido1) {
		this.apellido1 = apellido1;
	}

	public String getApellido2() {
		return apellido2;
	}

	public void setApellido2(String apellido2) {
		this.apellido2 = apellido2;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
	
	
	public String getNombreApellidos(){
		return String.format("%s %s,%s",getApellido1(),getApellido2(),getNombre());
	}

	public Integer getAsignacion() {
		return asignacion;
	}

	public void setAsignacion(Integer asignacion) {
		this.asignacion = asignacion;
	}

	public byte[] getFoto() {
		return foto;
	}

	public void setFoto(byte[] foto) {
		this.foto = foto;
	}

	public Integer getUsuCreacion() {
		return usuCreacion;
	}

	public void setUsuCreacion(Integer usuCreacion) {
		this.usuCreacion = usuCreacion;
	}

	

	public Date getFeCreacion() {
		return feCreacion;
	}

	public void setFeCreacion(Date feCreacion) {
		this.feCreacion = feCreacion;
	}

	

	public Integer getUsuModificacion() {
		return usuModificacion;
	}

	public void setUsuModificacion(Integer usuModificacion) {
		this.usuModificacion = usuModificacion;
	}

	public Date getFeModificacion() {
		return feModificacion;
	}

	
	public void setFeModificacion(Date feModificacion) {
		this.feModificacion = feModificacion;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getNombreFon() {
		return nombreFon;
	}

	public void setNombreFon(String nombreFon) {
		this.nombreFon = nombreFon;
	}

	public String getApellido1Fon() {
		return apellido1Fon;
	}

	public void setApellido1Fon(String apellido1Fon) {
		this.apellido1Fon = apellido1Fon;
	}

	public String getApellido2Fon() {
		return apellido2Fon;
	}

	public void setApellido2Fon(String apellido2Fon) {
		this.apellido2Fon = apellido2Fon;
	}

	
	public void borrar(){
		setEstado(IConstantesDomain.ESTADO_PASIVO);
	}

	public Set<UsuariosVersion> getVersionesUsuario() {
		return versionesUsuario;
	}

	public void setVersionesUsuario(Set<UsuariosVersion> versionesUsuario) {
		this.versionesUsuario = versionesUsuario;
	}
	
	
	
	
}